package com.rui.cn.zull.filter;


import java.nio.charset.Charset;
import java.util.Base64;

import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;

import javax.servlet.http.HttpServletRequest;

/**   
 * @ClassName:  AuthorizeRequestFilter   
 * @Description:针对需要认证的微服务（security安全策略的）进行授权处理
 * @author: 【zhang】
 * @date:   2017年10月21日 下午3:46:37      
 */
public class AuthorizeRequestFilter extends ZuulFilter{

	@Override
	public Object run() {
//		//获取当前请求的上下文
//		RequestContext currentContext=RequestContext.getCurrentContext();
//		// 认证的原始信息
//		String auth = "springcloud:zhang";
//		// 进行一个加密的处理
//		byte[] encodedAuth = Base64.getEncoder()
//				.encode(auth.getBytes(Charset.forName("US-ASCII")));
//		// 在进行授权的头信息内容配置的时候加密的信息一定要与“Basic”之间有一个空格
//		String authHeader = "Basic " + new String(encodedAuth);
//		currentContext.addZuulRequestHeader("Authorization", authHeader);
//		return null;
		RequestContext ctx = RequestContext.getCurrentContext();
		HttpServletRequest request = ctx.getRequest();
		System.out.println("----------请求地址---------->"+request.getRequestURL());
		Object accessToken = request.getParameter("accessToken");
		if (accessToken == null) {
			ctx.setSendZuulResponse(false);
			ctx.setResponseStatusCode(401);
			return null;
		}
		return  null;
	}

	@Override
	public boolean shouldFilter() {
		// 该Filter是否要执行
		return true;
	}

	@Override
	public int filterOrder() {
		// 设置优先级，数字越大优先级越低
		return 0;
	}

	@Override
	public String filterType() {
		// 在进行Zuul过滤的时候可以设置其过滤执行的位置，那么此时有如下几种类型：
		// 1、pre：在请求发出之前执行过滤，如果要进行访问，肯定在请求前设置头信息
		// 2、route：在进行路由请求的时候被调用；
		// 3、post：在路由之后发送请求信息的时候被调用；
		// 4、error：出现错误之后进行调用
		return "pre";
	}

}
